package org.example.ioc.pro2_ioc;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@Configuration
public class AppConfig {
    @Bean    //利用@Bean註解，將方法的回傳值加入到容器中，並以方法名稱作為Bean的名稱  方法名小写作为id
    public Product product() {
        return new Product();
    }
    //@Bean  这种方式  主要用于第三方类库， 第三方类库中没有@Component 注解  ， 我们可以通过这种方式来将第三方类库中的类加入到容器中


    //需求1：创建一个线程池对象，交给Spring管理，这整个对象所属的类属于第三方库提供
    @Bean
    public ThreadPoolExecutor tpe(){
        return new ThreadPoolExecutor(10, 20, 30, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100));
    }

    //需求2：创建一个数据库连接池对象，交给Spring管理，这整个对象所属的类属于第三方库提供
    @Bean
    public DruidDataSource ds(){
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl("jdbc:mysql://localhost:3306/mysql");
        ds.setUsername("root");
        ds.setPassword("123456");

        ds.setInitialSize(10);  //初始化数据池的大小
        ds.setMaxActive(20);   //最大连接数
        ds.setMinIdle(10);     //最小空闲连接数
        return ds;
    }

}
